我一直||
在OR表达式中使用(两个管道),包括C#和PHP.偶尔我会看到一个使用的管道:|
.这两种用法有什么区别?当使用一个在另一个之上时是否有任何警告或者它们是否可以互换?
就像&
和&&
运算符一样,双运算符是一个"短路"运算符.
例如:
if(condition1 || condition2 || condition3)
如果condition1为true,则不检查条件2和3.
if(condition1 | condition2 | condition3)
这将检查条件2和3,即使1已经为真.由于您的条件可能是非常昂贵的功能,因此使用它们可以获得良好的性能提升.
有一个很大的警告,NullReferences或类似的问题.例如:
if(class != null && class.someVar < 20)
如果class为null,则if语句将在class != null
false 之后停止.如果你只使用&,它会尝试检查class.someVar
你会得到一个很好的NullReferenceException
.使用Or-Operator可能不是一个陷阱,因为你不太可能触发坏事,但这是要记住的事情.
但是,除非你的设计中每个条件都是要执行的函数,否则没有人会使用单个&
或|
运算符.听起来像是一种设计气味,但有时(很少)这是一种干净的做事方式.该&
操作者"跑这3个功能,如果其中一个返回false,执行else块",而|
不会"只如果没有返回false运行else块" -可能是有用的,但正如所说,往往这是一个设计闻.
然而,第二次使用|
和&
运算符:按位运算.
|| 是逻辑OR运算符.听起来你基本上知道那是什么.它用于条件语句,如if,while等.
condition1 || condition2
如果condition1 OR condition2为true,则求值为true.
| 是按位OR运算符.它用于操作两个数字.您可以单独查看每个数字的每个位,如果其中一个位在至少一个数字中为1,那么结果位也将为1.这里有一些例子:
A = 01010101 B = 10101010 A | B = 11111111 A = 00000001 B = 00010000 A | B = 00010001 A = 10001011 B = 00101100 A | B = 10101111
希望这是有道理的.
因此,为了回答最后两个问题,除了"了解两个运营商之间的区别"之外,我不会说任何警告.它们不可互换,因为它们完成两件完全不同的事情.
一个是"按位或".
10011b | 01000b => 11011b
另一个是逻辑或.
true或false => true
好问题.这两个运算符在PHP和C#中的工作方式相同.
| 是一个按位OR.它将比较两个值的位.例如1101 | 0010 = 1111.这在使用位选项时非常有用.例如,读= 01(0X01)写= 10(0X02)读写= 11(0X03).一个有用的例子是打开文件.一个简单的例子是:
File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file
|| 是一个逻辑OR.这是大多数人对OR的看法,并根据他们的真相比较两个值.我要去商店,否则我会去商场.这是代码中最常用的一个.例如
if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer
PHP资源:http://us3.php.net/language.operators.bitwise
C#资源:http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx